<?php

if (!defined('BASEPATH'))
    exit('No direct script access allowed');

class Sales extends CI_Controller {

    public function index($success_message2 = null) {
        $this->load->model('Document_types_model');
        $this->load->model('Clients_model');
        $this->load->model('Sales_kardex_model');
        $vars['typeDocuments'] = $this->Document_types_model->select_guide_sale();
        $vars['clients'] = $this->Clients_model->getAll();
        $vars['searchsales'] = true;
        if (isset($success_message2)) {
            $vars['success_message2'] = true;
        }
        $vars['parametro'] = true;
        $vars['content_view'] = 'sales_form';
        $vars['menu'] = 'sales';
        $this->load->view('template', $vars);
    }

    public function search($edit = null) {

        $this->load->model('Sales_model');
        $this->load->model('Document_types_model');
        $this->load->model('Clients_model');
        $this->load->model('Sales_details_model');

        $document_type_id = $this->input->post('tipo');
        $document_code = $this->input->post('numero');

        $vars['typeDocuments'] = $this->Document_types_model->select_guide_sale();
        $vars['clients'] = $this->Clients_model->getAll();

        $datesale = $this->Sales_model->search_sale($document_code);
        $saledetails = $this->Sales_details_model->search_sale_deatils($document_code);
       
        $vars['fecha'] =  date('d/m/Y');
        $vars['saledetails'] = $saledetails;
        $vars['datesale'] = $datesale;
        $vars['contandodatos'] = count($datesale);        
        $vars['searchsales'] = true;
        $vars['content_view'] = 'sales_form';
        $vars['menu'] = 'sales';
        $this->load->view('template', $vars);
        
    }

    public function codeguia() {
        $this->load->model('Document_types_model');
        $codeguia = $this->Document_types_model->generanum();

        foreach ($codeguia as $c) {
            $codestring = $c->document_code;
            $num = (int) $codestring + 1;
            echo str_pad((int) $num, 12, "0", STR_PAD_LEFT);
        }
    }

    public function add($success_message = null) {
        $this->load->model('Document_types_model');
        $this->load->model('Clients_model');
        $vars['typeDocuments'] = $this->Document_types_model->select_guide_sale();
        $vars['clients'] = $this->Clients_model->getAll();
        if (isset($success_message)) {
            $vars['success_message'] = true;
        }





        $vars['content_view'] = 'sales_form';
        $vars['date_edit'] = 'editable';
        $vars['menu'] = 'sales';
        $this->load->view('template', $vars);
    }

    public function edit($edit = null ){


    }

    public function client() {
        $idClient = $this->input->post('id');
        $this->load->model('Clients_model');
        $dataClient = $this->Clients_model->find($idClient);
        echo json_encode($dataClient);
    }

    public function products() {
        $code = null;
        $description = null;
        $this->load->model('Products_model');
        if ($this->input->post('code')) {
            $code = $this->input->post('code');
        }
        if ($this->input->post('description')) {
            $description = $this->input->post('description');
        }
        $products = array();
        if ($code != null || $description != null) {
            $products = $this->Products_model->search($code, $description);
        }
        $vars['products'] = $products;
        $vars['code'] = $code;
        $vars['description'] = $description;
        $this->load->view('products_list', $vars);
    }

    public function stocks() {
        $code = null;
        $description = null;
        if ($this->input->post('code')) {
            $code = $this->input->post('code');
        }
        if ($this->input->post('description')) {
            $description = $this->input->post('description');
        }

        $this->load->model('Warehouses_product_model');
      
        $this->load->model('Products_model');
        $listStock = $this->Warehouses_product_model->listStockByProduct($code);
        $productData = $this->Products_model->find($code);
        $vars['priceProduct'] = $productData->price;
        $vars['codeProduct'] = $code;
        $vars['descriptionProduct'] = $description;
        $vars['listStock'] = $listStock;
        $vars['productData'] = $productData;
        $this->load->view('stock_list', $vars);
    }

    public function submit() {

       if($this->input->post('id_sales')){

           $this->load->model('Sales_model');
           $this->load->model('Sales_details_model');
           $this->load->model('Sales_kardex_model');
           $id_sale = $this->input->post('id_sales');

           $data['document_type_id'] = 4;
           $data['document_code'] = $this->input->post('numero');
           $numero = $this->input->post('numero');
           $datei = $this->input->post('date');
           $date = str_replace('/', '-', $datei);
           $datef = date("Y-m-d", strtotime($date) );           
           $data['date'] = $datef;
           $data['id_client'] = $this->input->post('client');
           $data['observations'] = $this->input->post('observations');
           $data['amount'] = $this->input->post('subtotalgeneral');

           echo $this->Sales_model->update_sale($id_sale, $data);

           $contenaumentador = $this->input->post('contenaumentador');

           for ($i = 0; $i <= $contenaumentador; $i++) {

                $product_code = $this->input->post('codigo_'.$i);
                $box = $this->input->post('totalcaja_'.$i);
                $pack = $this->input->post('totalpaguete_'.$i);
                $unit = $this->input->post('totalunidad_'.$i);

                $amount = $this->input->post('subtotal_'.$i);

                $data = array('document_code' => $numero,
                    'product_code' => $product_code,
                    'box' => $box,
                    'pack' => $pack,
                    'unit' => $unit,
                    'amount' => $amount);
                if( $product_code == 0 ){ 
                    /*si el campo codigo del producto no tiene ningun codigo entonces no grabara en la guia (esto es por que como ai un incrementador que va sumando +1 por cada producto que se va ingresando a la guia detalle, el aumentador sera usado 
                        en el nombre de cada campo 1 que pertence a tal fila y por ello si borramos algun producto el aumentador no dismiuira porque las demas filas necesitan el valor del aumentador actual y el nombre de la fila no cambiara, solo seguir el aumento que ha llevado hasta el momento) 
                      ejemplo: si llevamos 4 productos por el momento.. en el detalle de guia seria fila 1, fila 2, fila 3, fila 4, pero si decidimos borrar el primero quedaria fila2, fila3 , fila4, pero el aumentador es hasta 4 osea cuando corra el for correra hasta 4
                      aunque el primero fila1 no exita.. osea hay uno de sobra.. y como sobra, pero tiene un campo codigo_1_fila_1 resgitrado ese campo estara en 0 y el sistema no deberia gaurdarlo por que ocupa espacio
                    */

                }else{
                    $this->Sales_details_model->addDetails($data); 
                }
               
            

               
                
                for ($j = 0; $j <= 8; $j++) {   /*recorerra los 7 alamacenes con su respectiva caja, paquete y unidades*/


                          $codigo_almacen = $this->input->post('code_almacen_'.$j.'_fila_'.$i); //recorre todos los input con el nombre almacen "n" en la fila "n" para utlizarlo en la funcion de abajo
                   
                          $listar_stock_product_almacen = $this->Sales_model->select_almacen_productos($product_code,$codigo_almacen); // busca las cajas paquetes y unidades del producto "n" hubicado en el alamacen "n"
                       
                        foreach ($listar_stock_product_almacen as $lis ){
                         //cajas, paquetes y unidades actuales en el almacen de los productos
                           $cajas = $lis->boxes;
                           $paquetes = $lis->packs;
                           $unidades = $lis->Units;
                           
                         //recorrido de todos los inpust  generados y enviados desde el detalle de guia de venta
                           $pide_caja = $this->input->post('caja_almacen_'.$j.'_fila_'.$i); //recorrido del input caja del almacen "n" de la fila "n" (fila se refiere el posicion horizontal en que estan hubicadas en el detalle de guia de venta)
                           $cajas_actual = $cajas - $pide_caja; //realiza la operacion de restar las cajas actuales en el almacen con las cajas pedidas y los coloca en una variable
                          
                           $pide_paquete = $this->input->post('paquete_almacen_'.$j.'_fila_'.$i);//''
                           $paquete_actual = $paquetes - $pide_paquete;//''
                         
                           $pide_unidad = $this->input->post('unidad_almacen_'.$j.'_fila_'.$i);//''
                           $unidades_actual = $unidades - $pide_unidad;//''
                           if($pide_caja==0 && $pide_paquete==0 && $pide_unidad==0)
                           {
                           }
                           else
                           {
                               $data1 = array(   'document_code' => $numero,
                                            'product_code' => $product_code,
                                            'box' => $pide_caja,
                                            'pack' => $pide_paquete,
                                            'unit' => $pide_unidad,
                                            'id_warehouse' => $codigo_almacen);
                                $this->Sales_kardex_model->addKardexSales($data1);
                           }
                            $this->Sales_model->edit_stock_warehouse_product($product_code,$codigo_almacen,$cajas_actual,$paquete_actual,$unidades_actual);
                        }
             
          
                    }
      
            }

                $this->index(true);

       }else{
            
                $this->load->model('Sales_model');
                $this->load->model('Sales_details_model');
                $this->load->model('Sales_kardex_model');    
                $typedocument = 3;
                $numero = $this->input->post('numero');
                $datei = $this->input->post('date');
                $date = str_replace('/', '-', $datei);
                $datef = date("Y-m-d", strtotime($date) );           
                
                $client = $this->input->post('client');
                if ($client == 0) {
                    $client = "";
                }
                $observations = $this->input->post('observations');
                if ($observations == '') {
                    $observations = ' ';
                }
                $subtotalgeneral = $this->input->post('subtotalgeneral');

                $contenaumentador = $this->input->post('contenaumentador');

                $data = array('document_type_id' => $typedocument,
                    'document_code' => $numero,
                    'date' => $datef,
                    'id_client' => $client,
                    'observations' => $observations,
                    'amount' => $subtotalgeneral);

                $vars['success'] = $this->Sales_model->add_sales($data);


                for ($i = 0; $i <= $contenaumentador; $i++) {

                    $product_code = $this->input->post('codigo_'.$i);
                    $box = $this->input->post('totalcaja_'.$i);
                    $pack = $this->input->post('totalpaguete_'.$i);
                    $unit = $this->input->post('totalunidad_'.$i);

                    $amount = $this->input->post('subtotal_'.$i);

                    $data = array('document_code' => $numero,
                        'product_code' => $product_code,
                        'box' => $box,
                        'pack' => $pack,
                        'unit' => $unit,
                        'amount' => $amount);
                    if( $product_code == 0 ){ 
                        /*si el campo codigo del producto no tiene ningun codigo entonces no grabara en la guia (esto es por que como ai un incrementador que va sumando +1 por cada producto que se va ingresando a la guia detalle, el aumentador sera usado 
                            en el nombre de cada campo 1 que pertence a tal fila y por ello si borramos algun producto el aumentador no dismiuira porque las demas filas necesitan el valor del aumentador actual y el nombre de la fila no cambiara, solo seguir el aumento que ha llevado hasta el momento) 
                          ejemplo: si llevamos 4 productos por el momento.. en el detalle de guia seria fila 1, fila 2, fila 3, fila 4, pero si decidimos borrar el primero quedaria fila2, fila3 , fila4, pero el aumentador es hasta 4 osea cuando corra el for correra hasta 4
                          aunque el primero fila1 no exita.. osea hay uno de sobra.. y como sobra, pero tiene un campo codigo_1_fila_1 resgitrado ese campo estara en 0 y el sistema no deberia gaurdarlo por que ocupa espacio
                        */

                    }else{
                        $this->Sales_details_model->addDetails($data); 
                    }
                   
                

                   
                    
                    for ($j = 0; $j <= 8; $j++) {   /*recorerra los 7 alamacenes con su respectiva caja, paquete y unidades*/


                          $codigo_almacen = $this->input->post('code_almacen_'.$j.'_fila_'.$i); //recorre todos los input con el nombre almacen "n" en la fila "n" para utlizarlo en la funcion de abajo
                   
                          $listar_stock_product_almacen = $this->Sales_model->select_almacen_productos($product_code,$codigo_almacen); // busca las cajas paquetes y unidades del producto "n" hubicado en el alamacen "n"
                       
                        foreach ($listar_stock_product_almacen as $lis ){
                         //cajas, paquetes y unidades actuales en el almacen de los productos
                           $cajas = $lis->boxes;
                           $paquetes = $lis->packs;
                           $unidades = $lis->Units;
                           
                         //recorrido de todos los inpust  generados y enviados desde el detalle de guia de venta
                           $pide_caja = $this->input->post('caja_almacen_'.$j.'_fila_'.$i); //recorrido del input caja del almacen "n" de la fila "n" (fila se refiere el posicion horizontal en que estan hubicadas en el detalle de guia de venta)
                           $cajas_actual = $cajas - $pide_caja; //realiza la operacion de restar las cajas actuales en el almacen con las cajas pedidas y los coloca en una variable
                          
                           $pide_paquete = $this->input->post('paquete_almacen_'.$j.'_fila_'.$i);//''
                           $paquete_actual = $paquetes - $pide_paquete;//''
                         
                           $pide_unidad = $this->input->post('unidad_almacen_'.$j.'_fila_'.$i);//''
                           $unidades_actual = $unidades - $pide_unidad;//''
                           if($pide_caja==0 && $pide_paquete==0 && $pide_unidad==0)
                           {
                           }
                           else
                           {
                               $data1 = array(   'document_code' => $numero,
                                            'product_code' => $product_code,
                                            'box' => $pide_caja,
                                            'pack' => $pide_paquete,
                                            'unit' => $pide_unidad,
                                            'id_warehouse' => $codigo_almacen);
                                $this->Sales_kardex_model->addKardexSales($data1);
                           }
                            $this->Sales_model->edit_stock_warehouse_product($product_code,$codigo_almacen,$cajas_actual,$paquete_actual,$unidades_actual);
                        }
             
          
                    }
          
                }

          $this->add(true); /*si es cierto grabara y llamara a la funcion add el cual necesita un parametro, le enviamos true.. que significa 1 y ya la funcion add ara lo suyo*/   

       }
    }

    
    public function delete_detail() {

        $this->load->model('Sales_details_model');
        $document_code = $this->input->post('numero');
        $code = $this->input->post('code');

        echo $this->Sales_details_model->delete_detail($document_code, $code);
    }

    public function edit_amout() {
        $this->load->model('Sales_model');
        $document_code = $this->input->post('numero');
        $amount = $this->input->post('amount');

        $this->Sales_model->edit_amout($document_code, $amount);
    }

    public function search_code_unique() {
        $this->load->model('Sales_model');
        $document_code = $this->input->post('numero');

        echo $this->Sales_model->comparaction_code($document_code);
    }

}